import { observe } from "./observer/index";
import { logger, proxy } from "./utils/index";

// 初始化数据状态
export function initState(vm) {
	const opt = vm.$options;
	// 初始化属性
	if (opt.props) {
		initProps(vm);
	}
	// 初始化方法
	if (opt.methods) {
		initMethod(vm);
	}
	// 初始化数据
	if (opt.data) {
		initData(vm);
	}
	// 初始化计算属性
	if (opt.computed) {
		initComputed(vm);
	}
	// 初始化watch属性
	if (opt.watch) {
		initWatch(vm);
	}
}

// 初始化属性
function initProps(vm) {
	console.log("props");
}
// 初始化方法
function initMethod(vm) {
	console.log("props");
}

// 初始化数据
function initData(vm) {
	// 获取data
	let {
		$options: { data },
	} = vm;
	// 判断data是不是一个函数,是就执行获取数据,不是就直接获取,this执行当前的Vue实例
	// 把当前数据挂载到实例上
	data = vm._data = typeof data === "function" ? data.call(vm) : data;
	// 为了操作data中的数据更加方便
	for (const key in data) {
		// 代理对象
		proxy(vm, "_data", key);
	}
	// 劫持数据对象,改变时得到通知
	observe(data);
	logger.info("初始化data");
}
// 初始化计算属性
function initComputed(vm) {
	console.log("props");
}
// 初始化watch属性
function initWatch(vm) {
	console.log("props");
}
